#include <cstring>
#include <iostream>
#include <bits/stdc++.h>
#include <utility>
using namespace std;
const int N = 1005;
int n, m;
int x, y, x2, y2;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
string grid[N];
int check[N][N];
typedef pair<int,int> pp;
int main()
{
    cin >> n >> m ;cin>> x >> y >> x2 >> y2;
    for(int i=0;i<n;i++)
    {
        cin>>grid[i];
    }
    x--;y--;x2--;y2--;
    memset(check, -1, sizeof check);
    queue<pp>q;
    q.push(std::make_pair(x,y));
    check[x][y]=0;
    int ret=0;
    while(!q.empty())
    {
        int i=q.front().first;
        int j=q.front().second;
        q.pop();
        ret++;
        for(int k=0;k<4;k++)
        {
            int curx=i+dx[k];
            int cury=j+dy[k];
            if(curx>=0&&curx<n&&cury>=0&&cury<m&&check[curx][cury]==-1&&grid[curx][cury]=='.')
            {
                check[curx][cury]=check[i][j]+1;
                if(curx==x2&&cury==y2)
                {
                    cout<<check[curx][cury]<<endl;
                    return 0;
                }
                q.push(std::make_pair(curx,cury));
            }
        }
    }
    cout<<-1<<endl;
    
}
// 64 位输出请用 printf("%lld")